/**
* @depends jquery.ui.js
*/

(function($) {

	$.widget( 'ui.textarea', {
		
		_init: function() {
		
			var $this = this;

			// Create sizer
			var sizer = this._sizer = 
				this.element.clone()
				.addClass( 'ui-textarea-sizer' )
				.css( {
					visibility: 'hidden',
					position: 'absolute'
				} )
				.insertBefore(this.element);

			// Set default value
			var o = this.element
				.attr( 'value', this.options.defaultText )
				.addClass( 'ui-textarea ui-default' )
			// Bind events
				.blur( function() {
					if( o.attr( 'value' ) == '' ) {
						o.addClass( 'ui-default' );
						o.css( 'height', $this.options.defaultHeight );
						o.attr( 'value', $this.options.defaultText );
					}
					else {
						sizer.attr( 'value', o.attr( 'value' ) );
						o.css( 'height', sizer.attr( 'scrollHeight' ) + 'px' );
					}
				} )
				.focus( function() {
					if( o.hasClass( 'ui-default' ) ) {
						o.attr( 'value', '' );
						o.removeClass( 'ui-default' );
					}
				} )
				.bind( 'focus keydown keyup change', function() {
				
					$this.element.parents().each( function() {
						var o = $(this);
						if( o.css( 'display' ) == 'none' ) {
							o.addClass( 'TmpHidden' );
							o.css( 'display', 'block' );
						}
					} );
				
					sizer.attr( 'value', o.attr( 'value' ) );
					var height = sizer.attr( 'scrollHeight' );
					if( height < $this.options.minHeight ) {
						sizer.attr( 'value', o.attr( 'value' ) + "\nfoo" );
						height = sizer.attr( 'scrollHeight' );
					}
					o.css( 'height', height + 'px' );
					
					$this.element.parents( '.TmpHidden' ).each( function() {
						var o = $(this);
						o.removeClass( 'TmpHidden' );
						o.css( 'display', null );
					} );
				} );
			
		},
		
		options : {
			defaultText : 'Anything to share ?',
			defaultHeight : 20,
			minHeight : 30
		}
		
	
	
	} );

})(jQuery);
